home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / DiskUtil / Crunch / XFH / SRC / CFS.H < prev    next >
C/C++ Source or Header  |  1994-04-26  |  19KB  |  455 lines

  1. /* CFS.h - common definitions for XFH.
  2.    Copyright (C) 1991, 1992, 1993 Kristian Nielsen.
  3.  
  4.    This file is part of XFH, the compressing file system handler.
  5.  
  6.    This program is free software; you can redistribute it and/or modify
  7.    it under the terms of the GNU General Public License as published by
  8.    the Free Software Foundation; either version 2 of the License, or
  9.    (at your option) any later version.
  10.  
  11.    This program is distributed in the hope that it will be useful,
  12.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.    GNU General Public License for more details.
  15.  
  16.    You should have received a copy of the GNU General Public License
  17.    along with this program; if not, write to the Free Software
  18.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.            */
  19.  
  20.  
  21. #include "version.h"
  22.  
  23. #include <dos/dosextens.h>
  24. #include <dos/exall.h>
  25. #include <dos/notify.h>
  26. #include <dos/filehandler.h>
  27.  
  28. #define __USE_SYSBASE 42
  29.  
  30. #include <proto/exec.h>
  31. #include <proto/dos.h>
  32.  
  33. #include <clib/alib_protos.h>
  34.  
  35. #define MAXFILENAME 30        /* Maximum length of file names. */
  36. #define XROOTNAME "XFH"       /* Unit number and ':' will be appended. */
  37. #define XROOTNAMESIZE 15      /* Max. size of root assign (unit 2^32-1) */
  38.  
  39. #define ALTOPTIONPATH ".xfhrc"
  40.  
  41. #define TMPNAMETEMPLATE "%lx.%lx_XFH"   /* Used in SPrintF(..,task,num) */
  42. #define TMPNAMEMAXSIZE  (8+ 1+8+4+  1)
  43.  
  44. #define AREXXPORTTEMPLATE "%s"         /* %s will be device name (XHx:) */
  45. #define AREXXPORTMAXLEN 1              /* Plus device name size. */
  46. #define AREXXPORTPRI 1
  47.  
  48. #define OUTOFMEM glob -> ioerr = ERROR_NO_FREE_STORE
  49. #define DECLIOERR LONG saveioerr;
  50. #define PUTIOERR saveioerr = glob->ioerr
  51. #define SAVEIOERR LONG saveioerr = glob->ioerr
  52. #define RESTIOERR glob->ioerr = saveioerr
  53.  
  54. #define XFH_ID "XFH A"
  55.  
  56. #define MAXSTRING 256   /* Maximum length of some strings (like a path). */
  57. #ifdef DEBUG
  58. extern void KPrintF(char *,...);
  59. #define debug(a) KPrintF a
  60. #else
  61. #define debug(a)
  62. #endif
  63.  
  64.  
  65. /* This is the structure used internally to represent a file/directory
  66.  * lock. All locks we return contain the address of this structure in their
  67.  * lock->fl_Key field.
  68.  *
  69.  * The CFSLock.refcount field is a sad hack nessesary to overcome a
  70.  * problem with exclusive directory locks when compressing files. The
  71.  * problem is that we need a copy of the parent lock used in RawCFSOpen()
  72.  * when the file is Close()'d. However, if the parent lock is exclusive,
  73.  * it cannot be DupLock()'ed, and so we must store a reference to it.
  74.  * The refcount counts the number of such references, and prevents the
  75.  * lock from going away until after the Close().
  76.  */
  77.  
  78. struct CFSLock
  79.  {
  80.   LONG objtype;
  81.   struct cfsfunctions *f;
  82.   LONG mode;
  83.   struct FileLock *xlock;
  84.   LONG refcount;            /* Currently valid only for XOBJECT's. */
  85.  };
  86.  
  87.  
  88. /* Structure for file handles. */
  89. struct CFSFH
  90.  {
  91.   LONG objtype;
  92.   struct cfsfunctions *f;
  93.   LONG mode;
  94.   struct FileHandle *xfh;
  95.   char *filename;            /* Used when compressing file at Close(). */
  96.   struct CFSLock *parent;   /* Used when compressing file at Close(). */
  97.   /* A non-null 'filename' field means (for xobj's) that Close() will
  98.    * attempt to compress the file. */
  99.  };
  100.  
  101. /* CFSLock filetypes. */
  102. #define XOBJECTB  1      /* A simple handle on an object in ufs. */
  103. /* #define NUKEOBJECTB 2 */   /* The NUKE format (U. Mueller). */
  104. /* #define PPACKOBJB 3   */   /* Files packed with powerpacker. */
  105. #define XPKOBJECTB 4     /* Xpk.library files. */
  106.  
  107. #define XOBJECT     (1 << XOBJECTB)
  108. /* #define NUKEOBJECT  (1 << NUKEOBJECTB) */
  109. /* #define PPACKOBJ    (1 << PPACKOBJB)   */
  110. #define XPKOBJECT   (1 << XPKOBJECTB)
  111.  
  112.  
  113. /* Blocksize to fake in Examine()/ExNext(). */
  114. #define BLOCKSIZE glob->bytesperblock    
  115.  
  116. /* Global datastructure. This allow us to use global variables and still
  117.  * be reentrant without using any kind of short addressing (no need for
  118.  * any __saveds keywords or startup code).
  119.  */
  120. struct glob
  121.  {
  122.   /* Shared data buffers to save on dalloc()'s.*/
  123.   /* Note that care should be taken when using these, since they are*/
  124.   /* shared between a number of functions. A rule of thumb is that a*/
  125.   /* lower level (dosfunc.c) shouldn't use something owned by a*/
  126.   /* higher level (lock.c). This way, a call in lock.c to a function*/
  127.   /* in dosfunc.c won't change your buffer, while a call to another*/
  128.   /* lock.c-function potentially may.*/
  129.     
  130.   char stringbuf[MAXSTRING];        /* Buffer for dosfunctions (bstr conv.) */
  131.   char stringbuf2[MAXSTRING];       /* Buffer for dosfunctions (bstr conv.) */
  132.   char pktstringbuf[MAXSTRING];     /* Buffer for packet bstr->cstr. */
  133.   char pktstringbuf2[MAXSTRING];    /* Buffer for packet bstr->cstr. */
  134.   struct FileInfoBlock fib1;        /* Used during Lock(). */
  135.   struct FileInfoBlock fib2;        /* General high-level in dosfunc.c */
  136.   struct StandardPacket iopkt;      /* This will be long alligned. */
  137.   struct InfoData infodata;
  138.   
  139.   struct MsgPort *dosport,          /* Dos Port (ProcId) of this handler. */
  140.                  *ioport,           /* Port to use for DOS IO. */
  141.                  *xpkport;          /* Port for calling Xpk in KS1.3. */
  142.   struct Task *mytask;              /* Copy of FindTask(0L) */
  143.   struct Process *myproc;
  144.   void *DOSBase;
  145.   struct Library *XpkBase;
  146.   struct Library *IconBase;
  147.   struct DeviceNode *devnode;
  148.   char *devname;
  149.   struct DeviceList *volnode;       /* Pointer to our volumenode. */
  150.   BSTR bcplstartup;                 /* Copy of BPTR to startup string. */
  151.   struct CFSLock *rootlock;         /* Our rootlock. */
  152.   struct FileLock *xrootlock;       /* Rootlock for underlying fs. */
  153.   struct MsgPort *xprocid;          /* ProcID of the underlying fs. */
  154.   LONG ioerr;
  155.   short opencnt;
  156.   BOOL done;                        /* Flag for main packet loop. */
  157.   LONG tmpfilecount;                /* used for tmpfile generation. */
  158.   LONG bytesperblock;               /* Blocksize in the UFS. */
  159.   struct MsgPort *arexxport;
  160.   char *arexxportname;
  161.  
  162.   /* These are options handled by 'options.c'. */
  163.   /* Also read by SetConfigSem() in gui.c. */
  164.   char *badoption;                  /* Name of errorneous option. */
  165.   BOOL optionsset;                  /* True when options has been set. */
  166.   
  167.   BOOL stepdown;                    /* Flag for XpkPack(). */
  168.   BOOL autocompress;                /* Whether to compress on Write(). */
  169.   BOOL xscan;                       /* Whether to create xScan comments. */
  170.   BOOL truncateonpack;              /* Use SetFileSize() when packing? */
  171.   char *packmode;                   /* Packmode for XpkPack(). */
  172.   char *xRootName;                  /* 'True' name of our root dir. */
  173.   char *uservolname;                /* User requested volume name. ONLY
  174.                                      * accessed by createvolnode(). */
  175.   char *xpkpassword;                /* Password used in Xpk(Un)Pack(). */
  176.   BOOL xpksetpri;                   /* Change taskpri when (un)packing? */
  177.   LONG xpkpri;                      /* priority to use if xpksetpri. */
  178.   BOOL createvolnode;               /* Whether se have a volume. *NOTE*: */
  179.                                     /* DON'T CHANGE AFTER createvolnode().*/
  180.   BOOL FailOnExNext;                /* Silently gobble ModifyFIB() errors.*/
  181.   BOOL compressreadwrite;           /* Whether to compress MODE_READWRITE.*/
  182.   BOOL allowappend;                 /* Whether to support MODE_READWRITE.*/
  183.   char *userarexxportname;          /* User requested name of AREXX port. */
  184.   BOOL EnvoyKludge;                 /* Use Kludge for Envoy FS            */
  185.  
  186. #ifdef DEBUG
  187.   /* Extra fields for debug code. */
  188.   char debugbuf1[MAXSTRING];
  189.   char debugbuf2[MAXSTRING];        /* Used to print bcpl strings. */
  190. #endif
  191.  };
  192.  
  193. typedef struct glob *glb;
  194.  
  195.  
  196. /* For each of the supported file formats, there is an instance of this
  197.  * structure. It holds pointers to fuctions that performs tasks such as
  198.  * Read(), Lock(), etc.
  199.  */
  200. struct cfsfunctions
  201.  {
  202. /*********************** Input/Output functions. ************************/
  203.       /* Open file from parent lock of this type and a simple filename
  204.        * (no path specification). This will determine file type and
  205.        * fetch the correct function to actually do the open.
  206.        */
  207.   struct CFSFH * (*Open)(glb, struct CFSLock *, char *, LONG);
  208.      /* Read(), Write(), Seek(), Close() functions. */
  209.   LONG (*Read)(glb, struct CFSFH *, UBYTE *, LONG );
  210.   LONG (*Write)(glb, struct CFSFH *, UBYTE *, LONG );
  211.   LONG (*Seek)(glb, struct CFSFH *, LONG, LONG );
  212.   LONG (*Close)(glb, struct CFSFH *);
  213.   BOOL (*SetFileSize)(glb, struct CFSFH *, LONG, LONG);
  214.   BOOL (*LockRecord)(glb, struct CFSFH *, LONG, LONG, LONG, LONG);
  215.   BOOL (*UnLockRecord)(glb, struct CFSFH *, LONG, LONG);
  216. /*********************** Input/Output functions. ************************/
  217.      /* Lock function. As with Open, the type refers to the parent lock. */
  218.   struct CFSLock * (*Lock)(glb, struct CFSLock *, char *, LONG);
  219.      /* Other functions related to locks. */
  220.   struct CFSLock * (*DupLock)(glb, struct CFSLock *);
  221.   BOOL (*UnLock)(glb, struct CFSLock *);   /* Always succesful. */
  222.   BOOL (*Examine)(glb, struct CFSLock *, struct FileInfoBlock *);
  223.   BOOL (*ExNext)(glb, struct CFSLock *, struct FileInfoBlock *);
  224.   struct CFSLock * (*CreateDir)(glb, struct CFSLock *, char *);
  225.   BOOL (*DeleteFile)(glb, struct CFSLock *, char *);
  226.      /* Rename() is a bit tricky. As an example, how is a Rename()
  227.       * from a powerpacked file to an archive to be handled?
  228.          * The correct Rename() function to call is determined from
  229.          * the type of the FROM directory. Each function must then
  230.          * check the type of the destination directory themselves.
  231.       */
  232.   BOOL (*Rename)(glb, struct CFSLock *, char *, struct CFSLock *, char *);
  233.   struct CFSLock * (*Parent)(glb, struct CFSLock *);
  234.   BOOL (*SetProtection)(glb, struct CFSLock *, char *, LONG);
  235.   BOOL (*SetComment)(glb, struct CFSLock *, char *, char *);
  236.   BOOL (*SetFileDate)(glb, struct CFSLock *, char *, struct DateStamp *);
  237.   struct CFSFH *(*OpenFromLock)(glb, struct CFSLock *);
  238.      /* ToDo: What is SameLock() really supposed to do, packet level?
  239.       * In the CFS, internally, each filetype has a SameLock() that
  240.       * expects two locks of the same type, and returns a bool.
  241.       */
  242.   BOOL (*SameLock)(glb, struct CFSLock *, struct CFSLock *);
  243.      /* ToDo: Support for links also really needs some work... */
  244.   BOOL (*MakeLink)(glb, struct CFSLock *, char *, LONG, LONG);
  245.   LONG (*ReadLink)(glb, struct CFSLock *, char *, char *, ULONG);
  246.   BOOL (*ChangeMode)(glb, LONG, void *, LONG);
  247.   struct CFSLock * (*DupLockFromFH)(glb, struct CFSFH *);
  248.   struct CFSLock * (*ParentOfFH)(glb, struct CFSFH *);
  249.      /* The new 2.0 Examine..() type functions. ExAll() will be
  250.       * simulated if NULL.
  251.       */
  252.   LONG (*ExAll)(glb, struct CFSLock *, char *, LONG, LONG, struct ExAllControl *);
  253.   BOOL (*ExamineFH)(glb, struct CFSFH *, struct FileInfoBlock *);
  254.      /* ToDo: The notify functions still need some thought. Remember,
  255.       * a notify is on an absolute path, not relative to a Lock.
  256.       */
  257.   BOOL (*StartNotify)(glb, struct NotifyRequest *);
  258.   BOOL (*EndNotify)(glb, struct NotifyRequest *);
  259.  };
  260.  
  261. extern struct cfsfunctions Xfunc,Xpkfunc;
  262.  
  263. /* Prototypes. */
  264. /* CFS.c */
  265. struct DosPacket *getpkt(glb);
  266. ULONG getpktsigmask(glb);
  267. struct DosPacket *checkpkt(glb);
  268. void returnpkt(struct DosPacket *,LONG,LONG,glb);
  269. struct MsgPort *DoDeviceProc(LONG *,char *,glb);
  270. BPTR getfile(char *,glb);
  271. void closefile(BPTR,glb);
  272. void addvolnode(glb,struct DeviceList *);
  273. BOOL removevolnode(glb,struct DeviceList *);
  274. void DevNode_Stuff_Startup_String(glb,BSTR);
  275. BOOL createvolnode(glb,BOOL,struct FileInfoBlock *);
  276. BOOL SetVolumeNameVolNode(glb,char *);
  277. BOOL freevolnode(glb);
  278. BOOL diskinfo(glb,struct InfoData *);
  279. void SPrintF(char *,char *,...);
  280.  
  281. /* Packet.c */
  282. void putpkt(struct StandardPacket *,struct MsgPort *,struct MsgPort *,LONG,int,...);
  283. LONG dopkt(struct StandardPacket *,struct MsgPort *,struct MsgPort *,LONG *,LONG,int,...);
  284.  
  285.  
  286. /* dosfunc.c */
  287. struct FileLock *xLock(glb,struct FileLock *, char *name, LONG);
  288. BOOL xExists1(glb,struct FileLock *, char *);
  289. BOOL xExamine(glb, struct FileLock *,struct FileInfoBlock *);
  290. BOOL xExamineNext(glb,struct FileLock *,struct FileInfoBlock *);
  291. BOOL xExamineFH(glb,struct FileHandle *,struct FileInfoBlock *);
  292. struct FileLock *xCreateDir(glb,struct FileLock *, char *);
  293. BOOL xDeleteFile(glb,struct FileLock *, char *);
  294. BOOL xRename(glb,struct FileLock *,char *,struct FileLock *, char *);
  295. struct FileLock *xParentDir(glb,struct FileLock *);
  296. struct FileLock *xParentFH(glb,struct FileHandle *);
  297. BOOL xSetProtection(glb,struct FileLock *,char *,LONG);
  298. BOOL xSetComment(glb,struct FileLock *,char *,char *);
  299. BOOL xSetFileDate(glb,struct FileLock *,char *,struct DateStamp *);
  300. struct FileLock *xDupLock(glb,struct FileLock *);
  301. BOOL xUnLock(glb,struct FileLock *lock);
  302. struct FileHandle *xOpen(glb,struct FileLock *,char *,LONG);
  303. struct FileHandle *xOpenFromLock(glb,struct FileLock *);
  304. struct FileHandle *xOpenFromCopyOfLock(glb,struct FileLock *);
  305. BOOL xClose(glb,struct FileHandle *);
  306. LONG xRead(glb,struct FileHandle *,void *,LONG);
  307. LONG xWrite(glb,struct FileHandle *,void *,LONG);
  308. LONG xSeek(glb,struct FileHandle *,LONG,LONG);
  309. BOOL xChangeMode(glb,ULONG,void *obj,ULONG);
  310. BOOL xInfo(glb,struct FileLock *,struct InfoData *);
  311. BOOL xMakeLink(glb,struct FileLock *,char *,LONG,LONG);
  312. BOOL xReadLink(glb,struct FileLock *,char *,char *,ULONG);
  313. LONG xSameLock(glb,struct FileLock *, struct FileLock *);
  314. BOOL xgetpath(glb,struct FileLock *,char *,int);
  315. BOOL TransformXFH(glb,struct FileHandle *,struct FileLock *,char *,BOOL (*f)(glb,struct FileHandle *,struct FileHandle *,void *),void *userdata);
  316. BOOL TransformFile(glb,struct FileLock *,char *,BOOL (*f)(glb,struct FileHandle *,struct FileHandle *,void *), void *userdata);
  317. LONG xGetFileSize(glb,struct FileHandle *);
  318. BOOL xWriteStr(glb,struct FileHandle *,char *);
  319.  
  320.  
  321. /* misc.c */
  322. char *copybstr(BSTR bstr);
  323. char *copystr(char *str);
  324. void freestr(char *str);
  325. char *safebstr2cinplace(UBYTE *,int);
  326. BSTR safecstr2binplace(char *,int);
  327. LONG ank(glb,...);
  328. LONG ank_fail(glb,...);
  329. LONG owt(glb,...);
  330. LONG abs_seek_pos(LONG,LONG,LONG,LONG);
  331. LONG xFileSizeXfh(glb,struct FileHandle *);
  332.  
  333.  
  334. /* lock.c */
  335. struct CFSLock *RawCFSLock(glb,struct CFSLock *,char *,LONG);
  336. struct FileLock * CreateFileLock(glb,struct CFSLock *);
  337. struct CFSLock *CFSLockParent(glb,struct CFSLock *,char **);
  338. struct CFSLock * CFSLock(glb,struct CFSLock *,char *,LONG);
  339. struct CFSLock *makerootlockdayone(glb);
  340. struct CFSLock *CFSDupLock(glb,struct CFSLock *);
  341. struct CFSLock *CFSParentDir(glb,struct CFSLock *);
  342. struct CFSLock *CFSParentFH(glb,struct CFSFH *);
  343. BOOL CFSUnLock(glb,struct CFSLock *);
  344. BOOL CFSExamine(glb,struct CFSLock *,struct FileInfoBlock *);
  345. BOOL CFSExamineNext(glb,struct CFSLock *,struct FileInfoBlock *);
  346. BOOL CFSExamineFH(glb,struct CFSFH *,struct FileInfoBlock *);
  347. struct CFSLock *CFSCreateDir(glb,struct CFSLock *,char *);
  348. BOOL CFSDeleteFile(glb,struct CFSLock *, char *);
  349. BOOL CFSRename(glb,struct CFSLock *,char *,struct CFSLock *,char *);
  350. BOOL CFSSetProtection(glb,struct CFSLock *,char *,LONG);
  351. BOOL CFSSetComment(glb,struct CFSLock *,char *name,char *comment);
  352. BOOL CFSSetDate(glb,struct CFSLock *,char *,struct DateStamp *);
  353. BOOL CFSMakeLink(glb,struct CFSLock *,char *,LONG,LONG);
  354. BOOL CFSReadLink(glb,struct CFSLock *,char *,char *,ULONG);
  355. BOOL CFSSameLock(glb,struct CFSLock *,struct CFSLock *);
  356.  
  357.  
  358. /* file.c */
  359. struct CFSFH *RawCFSOpen(glb,struct CFSLock *,char *,LONG mode);
  360. struct CFSFH *CFSOpen(glb,struct CFSLock *,char *,LONG);
  361. BOOL CFSClose(glb,struct CFSFH *);
  362. LONG CFSRead(glb,struct CFSFH *,void *,LONG);
  363. LONG CFSWrite(glb,struct CFSFH *,void *,LONG);
  364. LONG CFSSeek(glb,struct CFSFH *,LONG,LONG);
  365.  
  366. /* pack.c */
  367. LONG xFileType(glb,struct FileHandle *);
  368.  
  369. /* xobj.c */
  370. struct XpkFH *XpkOpenOldFile(glb,struct FileHandle *);
  371. LONG XObjClose(glb,struct CFSFH *);
  372. LONG XObjRead(glb,struct CFSFH *,UBYTE *,LONG);
  373. LONG XObjWrite(glb,struct CFSFH *,UBYTE *,LONG);
  374. LONG XObjSeek(glb,struct CFSFH *,LONG,LONG);
  375. void XObjStealXpkFH(glb,struct CFSFH *);
  376. BOOL XObjStuffFH(glb,struct CFSFH *,char *,struct CFSLock *);
  377. void XObjUnStuffFH(glb,struct CFSFH *);
  378. void XObjFreeFH(glb,struct CFSFH *);
  379. struct CFSFH *XObjCreateFH(glb,struct FileHandle *,LONG,char *,struct CFSLock *);
  380. struct CFSLock *XObjMakeLock(glb,struct FileLock *,LONG);
  381. struct CFSLock *XObjDupLock(glb,struct CFSLock *);
  382. void XObjAddReferenceToLock(glb,struct CFSLock *);
  383. struct CFSLock *XObjParentDir(glb,struct CFSLock *);
  384. struct CFSLock *XObjParentFH(glb,struct CFSFH *);
  385. BOOL XObjUnLock(glb,struct CFSLock *);
  386. BOOL XObjSameLock(glb,struct CFSLock *,struct CFSLock *);
  387. BOOL XObjMakeLink(glb,struct CFSLock *,char *,LONG,LONG);
  388. BOOL XObjReadLink(glb,struct CFSLock *,char *,char *,ULONG);
  389. BOOL XObjExamine(glb,struct CFSLock *,struct FileInfoBlock *);
  390. BOOL XObjExNext(glb,struct CFSLock *,struct FileInfoBlock *);
  391. BOOL XObjExamineFH(glb,struct CFSFH *,struct FileInfoBlock *);
  392. BOOL ModifyFIB(glb,struct CFSLock *,struct FileInfoBlock *);
  393. BOOL XObjModifyFIB(glb,struct CFSLock *,struct FileInfoBlock *,struct FileHandle *);
  394. struct CFSLock *XObjCreateDir(glb,struct CFSLock *,char *);
  395. BOOL XObjSetProtection(glb,struct CFSLock *,char *,LONG);
  396. BOOL XObjSetComment(glb,struct CFSLock *,char *,char *);
  397. BOOL XObjSetFileDate(glb,struct CFSLock *,char *,struct DateStamp *);
  398. BOOL XObjDeleteFile(glb,struct CFSLock *,char *);
  399. BOOL XObjRename(glb,struct CFSLock *,char *,struct CFSLock *,char *);
  400.  
  401.  
  402. /* xpk.c */
  403. struct XpkLock;
  404. struct XpkFib;
  405.  
  406. struct XpkFH *XpkOpenOldFile(glb,struct FileHandle *);
  407. struct XpkFH *XpkOpenOldFileFromCopyOfLock(glb,struct XpkLock *);
  408. BOOL IsXpkFile(glb,struct FileHandle *);
  409. BOOL PackFile2File(glb,struct FileHandle *,struct FileHandle *,void *);
  410. BOOL UnPackFile2File(glb,struct FileHandle *,struct FileHandle *,void *);
  411. BOOL XpkExamine_FH(glb,struct FileHandle *,struct XpkFib *);
  412. LONG Xpk_Read(glb,struct XpkFH *,UBYTE *buf,LONG);
  413. LONG Xpk_Write(glb,struct XpkFH *,UBYTE *buf,LONG);
  414. LONG Xpk_Seek(glb,struct XpkFH *,LONG pos,LONG offset );
  415. BOOL Xpk_Close(glb,struct XpkFH *);
  416. struct XpkLock *XpkMakeLock(glb,struct FileLock *,LONG);
  417. struct XpkLock *XpkDupLock(glb,struct XpkLock *);
  418. struct CFSLock *XpkParentDir(glb,struct XpkLock *);
  419. struct CFSLock *XpkParentFH(glb,struct XpkFH *);
  420. BOOL XpkUnLock(glb,struct XpkLock *);
  421. BOOL XpkSameLock(glb,struct XpkLock *,struct XpkLock *);
  422. BOOL XpkObjExamine(glb,struct XpkLock *,struct FileInfoBlock *);
  423. BOOL XpkObjExamineFH(glb,struct XpkFH *,struct FileInfoBlock *);
  424. BOOL XpkModifyFIB(glb,struct XpkLock *,struct FileInfoBlock *,struct FileHandle *);
  425. BOOL XpkFastModifyFIB(struct FileInfoBlock *);
  426. BOOL InitXpk(glb);
  427. void CleanupXpk(glb);
  428. void xScan(glb,struct FileLock *,char *);
  429.  
  430. /* packfunc.c */
  431. BOOL ModifyFIB_type(glb,LONG,struct CFSLock *,struct FileInfoBlock *,struct FileHandle *);
  432.  
  433.  
  434. /* options.c */
  435. BOOL set_option(glb,char *);
  436. BOOL InitOptions(glb);
  437. void CleanupOptions(glb);
  438. BOOL SetOptionPermanent(glb,char *,char *);
  439. BOOL SetOptionsFromFile(glb,struct FileLock *,char *);
  440.  
  441.  
  442. /* arexx.c */
  443. void checkarexxmsg(glb);
  444. ULONG arexxsigmask(glb);
  445. BOOL InitArexx(glb);
  446. void CleanupArexx(glb);
  447.  
  448.  
  449. /* gui.c */
  450. BOOL UpdateXFHNode(glb);
  451. ULONG guisigmask(glb);
  452.  
  453.  
  454. /* End of CFS.h */
  455.